/**
 * 
 */
package me.myachievements.persistence.goal;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import me.myachievements.persistence.PersistentObject;
import me.myachievements.persistence.account.Account;
import me.myachievements.persistence.tag.Tag;


/**
 * @author besseym
 *
 */
public class Goal extends PersistentObject {
	
	private Boolean exposed;
	private Boolean complete;
	private PriorityEnum priority;
	private Long rank;
	private String title;
	private String description;
	private Date completeBy;
	private Date completedOn;
	private Date createdOn;
	private Date updatedOn;
	
	private Account account;
	private Set<Tag> tags;

	/**
	 * Constructor
	 */
	public Goal() {
		
		exposed = new Boolean(false);
		complete = new Boolean(false);
		priority = PriorityEnum.NORMAL;
		rank = new Long(0);
		title = new String();
		description = new String();
		completeBy = null;
		completedOn = null;
		createdOn = new Date();
		updatedOn = null;
		
		account = null;
		tags = new HashSet<Tag>();
	}

	/**
	 * @return the exposed
	 */
	public Boolean getExposed() {
		return exposed;
	}

	/**
	 * @param exposed the exposed to set
	 */
	public void setExposed(Boolean exposed) {
		this.exposed = exposed;
	}

	/**
	 * @return the complete
	 */
	public Boolean getComplete() {
		return complete;
	}

	/**
	 * @param complete the complete to set
	 */
	public void setComplete(Boolean complete) {
		this.complete = complete;
	}

	/**
	 * @return the priority
	 */
	public PriorityEnum getPriority() {
		return priority;
	}

	/**
	 * @param priority the priority to set
	 */
	public void setPriority(PriorityEnum priority) {
		this.priority = priority;
	}

	/**
	 * @return the rank
	 */
	public Long getRank() {
		return rank;
	}

	/**
	 * @param rank the rank to set
	 */
	public void setRank(Long rank) {
		this.rank = rank;
	}

	/**
	 * @return the title
	 */
	public String getTitle() {
		return title;
	}

	/**
	 * @param title the title to set
	 */
	public void setTitle(String title) {
		this.title = title;
	}

	/**
	 * @return the description
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * @param description the description to set
	 */
	public void setDescription(String description) {
		this.description = description;
	}

	/**
	 * @return the completeBy
	 */
	public Date getCompleteBy() {
		return completeBy;
	}

	/**
	 * @param completeBy the completeBy to set
	 */
	public void setCompleteBy(Date completeBy) {
		this.completeBy = completeBy;
	}

	/**
	 * @return the completedOn
	 */
	public Date getCompletedOn() {
		return completedOn;
	}

	/**
	 * @param completedOn the completedOn to set
	 */
	public void setCompletedOn(Date completedOn) {
		this.completedOn = completedOn;
	}

	/**
	 * @return the createdOn
	 */
	public Date getCreatedOn() {
		return createdOn;
	}

	/**
	 * @param createdOn the createdOn to set
	 */
	public void setCreatedOn(Date createdOn) {
		this.createdOn = createdOn;
	}

	/**
	 * @return the updatedOn
	 */
	public Date getUpdatedOn() {
		return updatedOn;
	}

	/**
	 * @param updatedOn the updatedOn to set
	 */
	public void setUpdatedOn(Date updatedOn) {
		this.updatedOn = updatedOn;
	}

	/**
	 * @return the account
	 */
	public Account getAccount() {
		return account;
	}

	/**
	 * @param account the account to set
	 */
	public void setAccount(Account account) {
		this.account = account;
	}

	/**
	 * @return the tags
	 */
	public Set<Tag> getTags() {
		return tags;
	}

	/**
	 * @param tags the tags to set
	 */
	public void setTags(Set<Tag> tags) {
		this.tags = tags;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Goal [title=" + title + ", priority=" + priority + ", rank="
				+ rank + ", complete=" + complete + ", exposed=" + exposed
				+ ", completeBy=" + completeBy + ", completedOn=" + completedOn
				+ ", createdOn=" + createdOn + ", updatedOn=" + updatedOn + "]";
	}

}
